home *** CD-ROM | disk | FTP | other *** search
- #include <Values.h>
-
- #define kBaseResID 128
- #define kMoveToFront (WindowPtr)-1L
- #define kSleep MAXLONG
-
- #define kLastMenu 0
-
- #define mApple kBaseResID
- #define iAbout 1
-
- #define mFile kBaseResID+1
- #define iQuit 1
-
- #define mOptions kBaseResID+3
- #define iChangeName 1
- #define iDisableMe 3
- #define iEnablePrev 4
- #define iAddExtraMenu 6
- #define iAppendItem 8
- #define iAddedItem 9
-
- #define kUnchangedName "\pChange My Name"
- #define kChangedName "\pChange Me Back Again"
-
- #define mExtraMenu kBaseResID+4
- #define iDeleteMenu 1
-
-
- /*************/
- /* Globals */
- /*************/
-
- Boolean gDone;
- Boolean gItemNameChanged = false;
-
-
- /***************/
- /* Functions */
- /***************/
-
- void ToolBoxInit( void );
- void WindowInit( void );
- void MenuBarInit( void );
- void EventLoop( void );
- void DoEvent( EventRecord *eventPtr );
- void HandleMouseDown( EventRecord *eventPtr );
- void HandleMenuChoice( long menuChoice );
- void HandleAppleChoice( short item );
- void HandleFileChoice( short item );
- void HandleOptionsChoice( short item );
- void HandleExtraMenuChoice( short item );
-
- /*************************** main *********/
-
- void main( void )
- {
- ToolBoxInit();
- MenuBarInit();
-
- EventLoop();
- }
-
- /*************************** ToolBoxInit */
-
- void ToolBoxInit( void )
- {
- InitGraf( &thePort );
- InitFonts();
- InitWindows();
- InitMenus();
- TEInit();
- InitDialogs( nil );
- InitCursor();
- }
-
- /****************** MenuBarInit ************/
-
- void MenuBarInit( void )
- {
- Handle menuBar;
- MenuHandle menu;
-
- menuBar = GetNewMBar( kBaseResID );
- SetMenuBar( menuBar );
-
- menu = GetMHandle( mApple );
- AddResMenu( menu, 'DRVR' );
-
- DrawMenuBar();
- }
-
- /************************* EventLoop *********/
-
- void EventLoop( void )
- {
- EventRecord event;
-
- gDone = false;
- while ( gDone == false )
- {
- if ( WaitNextEvent( everyEvent, &event, kSleep, nil ) )
- DoEvent( &event );
- }
- }
-
- /************************** DoEvent */
-
- void DoEvent( EventRecord *eventPtr )
- {
- char theChar;
-
- switch ( eventPtr->what )
- {
- case mouseDown:
- HandleMouseDown( eventPtr );
- break;
- case keyDown:
- case autoKey:
- theChar = eventPtr->message & charCodeMask;
- if ( (eventPtr->modifiers & cmdKey) != 0 )
- HandleMenuChoice( MenuKey( theChar ) );
- break;
- }
- }
-
- /********************* HandleMouseDown */
-
- void HandleMouseDown( EventRecord *eventPtr )
- {
- WindowPtr window;
- short thePart;
- long menuChoice;
-
- thePart = FindWindow( eventPtr->where, &window );
-
- switch ( thePart )
- {
- case inMenuBar:
- menuChoice = MenuSelect( eventPtr->where );
- HandleMenuChoice( menuChoice );
- break;
- case inSysWindow :
- SystemClick( eventPtr, window );
- break;
- }
- }
-
- /****************** HandleMenuChoice *********/
-
- void HandleMenuChoice( long menuChoice )
- {
- short menu;
- short item;
-
- if ( menuChoice != 0 )
- {
- menu = HiWord( menuChoice );
- item = LoWord( menuChoice );
-
- switch ( menu )
- {
- case mApple:
- HandleAppleChoice( item );
- break;
- case mFile:
- HandleFileChoice( item );
- break;
- case mOptions:
- HandleOptionsChoice( item );
- break;
- case mExtraMenu:
- HandleExtraMenuChoice( item );
- break;
- }
- HiliteMenu( 0 );
- }
- }
-
- /****************** HandleAppleChoice ************/
-
- void HandleAppleChoice( short item )
- {
- MenuHandle appleMenu;
- Str255 accName;
- short accNumber;
-
- switch ( item )
- {
- case iAbout:
- SysBeep( 20 );
- break;
- default:
- appleMenu = GetMHandle( mApple );
- GetItem( appleMenu, item, accName );
- accNumber = OpenDeskAcc( accName );
- break;
- }
- }
-
- /***************** HandleFileChoice ************/
-
- void HandleFileChoice( short item )
- {
- switch ( item )
- {
- case iQuit :
- gDone = true;
- break;
- }
- }
-
- /****************** HandleOptionsChoice ***************/
-
- void HandleOptionsChoice( short item )
- {
- MenuHandle menu;
-
- menu = GetMHandle( mOptions );
-
- switch ( item )
- {
- case iChangeName:
- if ( gItemNameChanged )
- SetItem( menu, iChangeName, kUnchangedName );
- else
- SetItem( menu, iChangeName, kChangedName );
- gItemNameChanged = ! gItemNameChanged;
- break;
- case iDisableMe:
- DisableItem( menu, iDisableMe );
- EnableItem( menu, iEnablePrev );
- break;
- case iEnablePrev:
- DisableItem( menu, iEnablePrev );
- EnableItem( menu, iDisableMe );
- break;
- case iAddExtraMenu:
- DisableItem( menu, iAddExtraMenu );
- menu = GetMenu( mExtraMenu );
- InsertMenu( menu, kLastMenu );
- DrawMenuBar();
- break;
- case iAppendItem:
- AppendMenu( menu, "\pCan't Delete Me..." );
- DisableItem( menu, iAppendItem );
- break;
- case iAddedItem:
- SysBeep( 20 );
- break;
- }
- }
-
- /****************** HandleExtraMenuChoice *************/
-
- void HandleExtraMenuChoice( short item )
- {
- MenuHandle menu;
-
- switch ( item )
- {
- case iDeleteMenu:
- menu = GetMHandle( mOptions );
- EnableItem( menu, iAddExtraMenu );
-
- DeleteMenu( mExtraMenu );
- DrawMenuBar();
- break;
- }
- }